﻿using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Events;

namespace My.ToDoListTiered.Web;

public class Program
{
    public async static Task<int> Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
#if DEBUG
            .MinimumLevel.Debug()
#else
            .MinimumLevel.Information()
#endif
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
            .Enrich.FromLogContext()
            .WriteTo.Async(c => c.File("Logs/logs.txt"))
            .WriteTo.Async(c => c.Console())
            .CreateLogger();

        try
        {
            Log.Information("Starting web host.");
            var builder = WebApplication.CreateBuilder(args);
            builder.Host.AddAppSettingsSecretsJson()
                .UseAutofac()
                .UseSerilog();
            await builder.AddApplicationAsync<ToDoListTieredWebModule>();
            var app = builder.Build();
            await app.InitializeApplicationAsync();
            await app.RunAsync();
            return 0;
        }
        catch (Exception ex)
        {
            if (ex is HostAbortedException)
            {
                throw;
            }

            Log.Fatal(ex, "Host terminated unexpectedly!");
            return 1;
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }
}
//https://localhost:44371/.well-known/openid-configuration
// vue对接ABP基本思路 :   https://www.sohu.com/a/413350846_468635
//使用基于JWT标准的Token访问WebApi:https://blog.csdn.net/qq_43678418/article/details/86414203

//string url = "http://www.bdcan.cn:5610/api/app/weixinData/doByType?weixin=" + weixinData;//提示：1、d:\xinxi\wx.aspx.cs中的 PostDataApi(string weixinData) string url = "http://www.bdcan.cn:5610/api/app/weixinData/doByType?weixin=" + weixinData;2、 http://www.bdcan.cn:5610 在123.203.101.25服务器上通过nginx负载均衡和转发： 5610端口是本地服务器（颍上电脑）内网穿访问的端口（与本地访问容器的端口7610不能相同）。3、本地服务的内网穿透由5610转发到7620端口，4、本地nginx 由7620转发到本地的7610；5、要在远程服务器上防火墙放通5610。

//微信公众号如何获取手机号，H5调用小程序，小程序调用H5 https://blog.csdn.net/u010757785/article/details/100534023  

//该项目为：MyAbp。
// 0 在My.MyAbp.Web上进入cmd:dotnet watch run,
//1修改连接字符串。
//2 从程序包管理控制台中默认项目选择：EntityFrameworkCore为启动项目
//3 add-migration add1 ;  update-database  ,注：新添加对象后，还要添加如： CreateMap<GlobalvDto, CreateEditGlobalvViewModel>();        CreateMap<CreateEditGlobalvViewModel, CreateUpdateGlobalvDto>();
//4 启动并自初始化种子数据后，再设 Web为启动项目即可启动了。 
//5 添加redis:1)在Domain层NuGet StackExchange.Redis 并添加RedisHelper.cs ;2)
//6 在Domain层添加数据模型
//7 退出当前项目，将整个项目放置进aspnet-core这个文件夹中。
//8 利用第三方代码生成器AbpHelper生成其余代码
//9 add-migration add2 ;  update-database     1）、 Add-Migration add6 -c MyAbpDbContext   2）、 Update-Database -Context MyAbpDbContext
//10 添加Dockfile，并禁用COPY ["nuget.config", "."]这句，再将此文件移到该解决方案所在的目录下。
//11 powershell到当前解决方案所在的文件夹下
//12 生成并应用https证和镜像并运行容器
//13  注：要将Dockerfile考贝到当前解决方案目录下的。
//14 更新数据库出错时用到：1）、get-help entityframeworkcore ；2）、Script-Migration ；3）、在数据库执行窗口中执行(找到添加新表的语句段，在Navicat查询窗口中执行即可)。

//下面是添加signalr步骤：https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?view=aspnetcore-5.0&tabs=visual-studio





//以下正确的。2021.05.30:15:20 注：不同镜像的证书不要放在同一目录下。
//dotnet dev-certs https --clean
//dotnet dev-certs https -t
//dotnet dev-certs https -ep /docker/todolisttieredcustomer/https/openiddict.pfx -p abcdljy9520111 //注：这时就在当前目录下生成了。
//dotnet user-secrets -p  My.ToDoListTiered.Web.csproj set "Kestrel:Certificates:Development:Password" "abcdljy9520111"
//docker build  -t liured88/weixin .
// docker run --name myabp_2 -itd -p 7021:80 -p 7022:443       -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=7022 -e ASPNETCORE_Kestrel__Certificates__Default__Password="abcdljy9520111" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/myabp_2.pfx   -e LC_ALL="en_US.UTF-8" -e TZ="Asia/Shanghai" -v d:\docker\myabp_2\https:/https/  -v d:\docker\myabp_2\appsettings.json:/app/appsettings.json   -v d:\docker\myabp_2\wwwroot:/app/wwwroot  --restart=always     --privileged=true  --network=mynet  liured88/myabp_2

//下面是在linux上的，原来ip也可用https 注：要将对应的证书上传到对应的目录下才能启动起来。//https://blog.csdn.net/huangli1466384630/article/details/88179551
//docker run --name myabp_2 -it -p 7612:80 -p 7712:443      -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=7712 -e ASPNETCORE_Kestrel__Certificates__Default__Password="abcdljy9520111" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/myabp_2.pfx   -e LC_ALL="en_US.UTF-8" -e TZ="Asia/Shanghai"         -v /home/https/myabp_2:/https/     liured88/myabp_15
//windows:
// docker run --name myabp_2 -it -p 7612:80 -p 7712:443     -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=7712 -e ASPNETCORE_Kestrel__Certificates__Default__Password="abcdljy9520111" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/myabp_2.pfx   -e LC_ALL="en_US.UTF-8" -e TZ="Asia/Shanghai" -v d:\docker\abp\myabp_2\https:/https/ liured88/myabp_38
//linux:
//docker run --name myabp_2 -it -p 7612:80 -p 7712:443     -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=7712 -e ASPNETCORE_Kestrel__Certificates__Default__Password="abcdljy9520111" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/myabp_2.pfx   -e LC_ALL="en_US.UTF-8" -e TZ="Asia/Shanghai" -v /home/https/myabp_2/https:/https/ liured88/myabp_38






// 注：该项目的特别之处：
// 当老板首次关注时，需要添加手机号。1）、手机号添加到BossMangaer和RegionLabel中

//  发布：进入工具->命令行：dotnet publish   /p:PublishSingleFile=false /p:Configuration=Release


//小程序 1 信息帮帮（已认证李霞）：AppID(小程序ID) wx6082064bf24cc4e6 ； 登录邮箱919414297@qq.com；原始ID：gh_f3983b0f6a34
//2 AppID：wxec50b502c6dfd39d;AppSecret:fb157e1f19636c736b1373e5a3bcca30;
/////微信开放平台：https://open.weixin.qq.com/，登录账号：527194933@qq.com,pw:abcdljy95111;AppID：wxec50b502c6dfd39d
//用李霞手机扫码登录微信商户平台：https://pay.weixin.qq.com/index.php/core/mkt_home   商户号1267498101  AppID账号 wx3dccd79fcea02795  企业全称：
//

//商户号1617770228 商户名称:个体户李霞 JSAPI支付http://www.bdcan.cn/html5/lxpay.aspx/	 Native支付http://www.bdcan.cn/html5/ReturnLxP.aspx/	信息帮帮
//  wx3dccd79fcea02795
// 服务号
//https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2Findex.php%2Fextend%2Fpay_setting%2Fma
//dotnet My.MyAbp.Web.dll --urls= "http://*:9099" --ip= "127.0.0.1" --port= 9099

//个体户李霞： 商户号：1617770228  ，费率：0.6%

//public Startup(IConfiguration configuration)
//{//https://www.cnblogs.com/dotnet261010/p/12033624.html     https://blog.csdn.net/czjnoe/article/details/114266247
//   // Configuration = configuration;

//  //  var section = configuration["Redis:Default"];

//}


/// <summary>
/// 一、设计：
/// 1、客户端功能：消费打折，在线自充，到店充值，到店提现，余额转卡，余转微信，余额转支付宝，余额查询，记录查询
/// 2、服务端功能：
/// </summary>
/// <param name="services"></param>


//生成老板店菜单注意点：
//1、在微信公众平台要将老板的标签改为对应的才更新菜单。2、更新菜单时要将旧菜单号变为空才生效
//3、要添加regionLable,addmoney,BossManager，AgentManager，MyCard五张表。

//太好了：代码生成器：https://www.cnblogs.com/igeekfan/p/abphelper-cli-start.html#%E5%85%A5%E9%97%A8
//1、 abphelper generate crud Chat -d D:\Development\myabp_2\aspnet-core  注：这个要在My.Myabp.Web下操作:在终端打开后进入cmd，还要进入admin角色管理中开启Create等权限;2、如果没有abphelper,需要先安装 ：dotnet tool install --global EasyAbp.AbpHelper --version 0.11.0
//2、禁用index.html上面的一个错误引用: PageLayout.Content.MenuItemName = "MyAbpMenus.UrlAddMoney";加引号。3、在MyAbpWebAutoMapperProfile.cs中添加映射；4、添加菜单，5、修改本在化文件，6、在程序包管理器控制台中默认项目设置为：.DbMigrations 后运行：add-migration add60 ;update-database；7进入系统中添加权限。8、要在服务类中引用：using System.Linq;

//dotnet run -urls="http://*:9008" --ip=127.0.0.1  --port=9008
//dotnet My.MyAbp.Web.dll urls=https://localhost:9007



//模块化处理的方法：
//1 安装包：Volo.Abp.AspnetCore.Mvc
// # 先创建微服务解决方案
//  abp new My.MyAbp --new --add-to-solution-file
//  abp add-module My.MyAbp.MyTools --new --add-to-solution-file

// 121.5.116.46 登录用邮箱：1393913107@qq.com 

// public IConfiguration Configuration { get; }

//发布：dotnet publish -o publish_myabp ;

//git提交的四步：1、输入信息；2、^推送；3、全部提交 ;4、推送到->刘家阳
// 配置https:  https://www.likecs.com/show-308219591.html




//证书安装，这个好呀
//dotnet dev-certs https --clean
//dotnet dev-certs https -t
//dotnet dev-certs https -ep bdcan.pfx -p abcdljy9520111 
//dotnet user-secrets set "Kestrel:Certificates:Development:Password" "abcdljy9520111"

//我现在就遇到这一个问题：当在本地（https://localhost:44318）测试时，是可以成功的，但是，我将些应用build一个容器openids后，该容器openids 也做了端口映射（-p 7270：443）,我也在hosts中添加了（192.168.0.102 gateway.docker.internal）这一行，并且，我也自签了证书（common name:gateway.docker.internal）,并且也将自签名的根证书（root-ca.crt）上传到容器openids:/usr/local/share/ca-certificates/和openids:/etc/ssl/certs/目录下了，也将由根证书root-ca.crt签发的server.crt私有证书server.key转化为证书openids.pfx,并将证书openids.pfx放在了容器openids可以读取挂载位置`D:\docker\openids\https`上了，为什么我使用https://gateway.docker.internal:7270访问容器openids时，还是提示证书有问题，请你仔细分析一下，我到底在哪个环节上的问题，并帮我详细指导解决这一问题，谢谢。最后原因：确保你的 HTTP 客户端正确加载了证书


//在项目文件 NeuCharAppSample.csproj 中添加 UserSecretsId 属性。你可以在项目文件的根节点 <Project> 下添加类似下面的属性：
//xml
//Copy code
//<Project Sdk="Microsoft.NET.Sdk.Web">
//    <PropertyGroup>
//        <!-- Other project properties -->

//        <!-- Add this line -->
//        <UserSecretsId>MyUserSecretsId</UserSecretsId>
//    </PropertyGroup>

//    <!-- Rest of the project configuration -->
//</Project>




//当add-migration 不能用时，可以用下面代替：
//cd D:\Development\My\MyMinio\src\My.Minio.EntityFrameworkCore
//dotnet ef migrations add add1 --project "D:\Development\My\MyMinio\src\My.Minio.EntityFrameworkCore" --startup-project "D:\Development\My\MyMinio\src\My.Minio.EntityFrameworkCore"
//dotnet ef database update

//abp install-libs